home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Indiana Jones / Indiana Jones.exe / RESOURCE / PREVIEW.GOB / cog_actor_lavawarrior.cog < prev    next >
Text File  |  1999-11-15  |  8KB  |  293 lines

  1. # Jones 3D Cog Script
  2. #
  3. # actor_LavaWarrior.cog
  4. #
  5. # [RT] [MDR]
  6. #
  7. # 1) Opens Lava Warrior's eyes when he wakes up, closes 'em when he goes back to sleep.
  8. # 2) Converts a slap attack into self inflicted damage if player moves out of range\angle
  9. #
  10. # ### Programming note ###
  11. # f_hitDist is from Lava Warrior's center pos, which does not match values set in .AI file.
  12. #
  13. # (C) 1999 LucasArts Entertainment Company LLC. All Rights Reserved
  14. #
  15. # ===================================================================
  16.  
  17. # ===================================================================
  18. symbols
  19.  
  20.     message        aievent
  21.     message        damaged
  22.     message        missed
  23.     message        fire
  24.     message        callback
  25.     message        timer
  26.  
  27. # ************************** JUMP LABELS ************************
  28.     flex        BackfireAttack                    local
  29.  
  30. # ************************** AI CLASSES ************************
  31.     ai            awake=lavawarrior.ai            local
  32.     ai            asleep=lavawarrior_sleep.ai        local
  33.     
  34. # ************************** TEMPLATES *************************
  35.     template    tpl_PrimaryWeapon=+lavahit_md    local
  36.  
  37.     material    face=lwhdfr.mat                    local
  38.  
  39.     model        wakingHead=head_lw_waking.3do    local
  40.     model        awakeHead=head_lw_awake.3do        local
  41.  
  42. # ************************** MISC LOCAL VARS *******************
  43.     thing        t_lavaDude                        local
  44.     thing        t_bullet                        local
  45.  
  46.     flex        f_hitDot=0.4                    local
  47.     flex        f_hitDist=0.20                    local
  48.     int            TIMERID_FACIAL=1                local
  49.     int            TIMERID_SHAKE=2                    local
  50.  
  51.     vector        vec_ToTrgt                        local
  52.     int            n_damage                        local
  53.                 
  54.     int            n_eventType                        local
  55.     int            n_newMode                        local
  56.     int            n_param                            local
  57.  
  58.     int            n_idxShake                        local
  59.     vector        vec_pos                            local
  60.     vector        vec_dir                            local
  61.  
  62. end
  63.  
  64.  
  65. # ===================================================================
  66. code
  67.  
  68. # ...................................................................
  69. aievent:
  70.  
  71.     n_eventType    = GetParam(0);
  72.     n_param        = GetParam(2);                                        # Value depends on n_eventType
  73.  
  74.     t_lavaDude    = GetSenderRef();
  75.  
  76.     if ( n_eventType == 0x100 )                                        #---- EVENT_MODECHANGED
  77.     {
  78.         n_newMode = GetParam(1);
  79.  
  80.         if ( !BITTEST(n_param, 0x2) && BITTEST(n_newMode, 0x2) )        # Switched to MODE_ATTACKING
  81.         {
  82.             # We can target him now
  83.             ClearActorFlags(t_lavaDude, 0x100000);
  84.  
  85.             # Set the "awake" ai
  86.             AISetClass(t_lavaDude, awake);
  87.             
  88.             # Swap in the head with the animated material
  89.             SetThingMesh(t_lavaDude, 1, wakingHead, 0);
  90.  
  91.             # Play the anim and wait
  92.             MaterialAnim(face, 8.0, 0x0);
  93.  
  94.             SetTimerEx(0.5, TIMERID_FACIAL, t_lavaDude, 0);
  95.         }
  96.  
  97.         if ( !BITTEST(n_param, 0x4) && BITTEST(n_newMode, 0x4) )        # Switched to MODE_SEARCHING
  98.         {
  99.             # No targeting while he's stoned, plus he's immobile.
  100.             SetActorFlags(t_lavaDude, 0x140000);
  101.  
  102.             # Set the "asleep" ai
  103.             AISetClass(t_lavaDude, asleep);
  104.  
  105.             # Stop him so he's not walking around with his eyes closed
  106.             StopThing(t_lavaDude);
  107.  
  108.             # Turn off his headlight
  109.             #SetHeadlightIntensity(t_lavaDude, '0.0 0.0 0.0');
  110.  
  111.             # Restore the head
  112.             RestoreThingMesh(t_lavaDude, -99);
  113.         }
  114.  
  115.         if ( !BITTEST(n_param, 0x1) && BITTEST(n_newMode, 0x1) )    # Switched to MODE_MOVING
  116.         {
  117.             if ( IsModePlaying(t_lavaDude, 75) > 0 )
  118.             {
  119.                 StopThing(t_lavaDude);                                # If stunned, no moving
  120.             }
  121.         }
  122.     }
  123.     else if (n_eventType == 0x10000)                            #---- SITHAI_EVENTPREFIRE ----
  124.     {
  125.         if ( IsModePlaying(t_lavaDude, 75) > 0 )
  126.         {
  127.             SetActorWeapon(t_lavaDude, -1);                            # If stunned, no firing
  128.             return;
  129.         }
  130.  
  131.         if ( BITTEST(n_param, 0x0010) )                            #---- SITHAIUTIL_FIRE_PRIMARY ----
  132.         {
  133.             SetThingUserData(t_lavaDude, 1);                        # Set "primary fire in progress"
  134.         }
  135.     }
  136.     else if (n_eventType == 0x20000)                            #---- SITHAI_EVENTPOSTFIRE ----
  137.     {
  138.         SetActorWeapon(t_lavaDude, tpl_PrimaryWeapon);                # Restore primary weapon
  139.         SetThingUserData(t_lavaDude, 0);                            # Clear "primary fire in progress"
  140.     }
  141.  
  142.     return;
  143.  
  144. # ...................................................................
  145. fire:
  146.  
  147.     t_lavaDude    = GetSenderRef();
  148.     t_bullet    = GetSourceRef();
  149.     n_damage    = GetParam(0);
  150.  
  151.     StopThing(t_lavaDude);
  152.  
  153.     vec_ToTrgt    = VectorSub( GetThingPos(GetLocalPlayerThing()), GetThingPos(t_lavaDude) );
  154.     if ( VectorLen(vec_ToTrgt) > f_hitDist )
  155.     {
  156. #        DEBUGFLEX(VectorLen(vec_ToTrgt), "Out of range");
  157.         DestroyThing(t_bullet);                                    # remove the bullet
  158.         call BackfireAttack;                                    # feel the pain
  159.         return;
  160.     }
  161.  
  162.     vec_ToTrgt    = VectorNorm( vec_ToTrgt );
  163.     if ( VectorDot(GetThingLVec(t_lavaDude), vec_ToTrgt) < f_hitDot )
  164.     {
  165. #        DEBUGFLEX(VectorDot(GetThingLVec(t_lavaDude), vec_ToTrgt), "Out of angle");
  166.         DestroyThing(t_bullet);                                    # remove the bullet
  167.         call BackfireAttack;                                    # feel the pain
  168.     }
  169.  
  170.     return;
  171.  
  172.  
  173. # ...................................................................
  174. damaged:
  175.  
  176.     t_lavaDude = GetSenderRef();
  177.     n_param = GetParam(1);
  178.  
  179.     # SITH_DAMAGE_IMP1?
  180.     if (n_param == 0x1000)
  181.     {
  182.         SetTimerEx(0.1, TIMERID_SHAKE, 10, 0);
  183.  
  184.         StopThing(t_lavaDude);
  185.         ResetThing(t_lavaDude);
  186.         DamageThing(t_lavaDude, 75, 0x80, GetLocalPlayerThing());
  187.  
  188.         PlaySoundClass(t_lavaDude, 124);                        # Play RESERVED2
  189.         PlaySoundClass(t_lavaDude, 125);                        # Play RESERVED3
  190.  
  191.         return;
  192.     }
  193.  
  194.     # SITH_DAMAGE_CRUSH?
  195.     if (n_param == 0x80)
  196.     {
  197.         return;
  198.     }
  199.  
  200.     # DAMAGE_IMPACT?
  201.     if ( n_param == 0x01 )
  202.     {
  203.         PlaySoundClass(t_lavaDude, 85);                            # Play a SITHSOUNDCLASS_DEFLECTED sound
  204.     }
  205.  
  206.     ReturnEx(0);                                            # Prevent default hit sound from playing
  207.  
  208.     return;
  209.  
  210.  
  211. # ...................................................................
  212. timer:
  213.  
  214.     if ( GetSenderID() == TIMERID_SHAKE )
  215.     {
  216.         n_idxShake = GetParam(0);
  217.         if ( n_idxShake > 0 )
  218.         {
  219.             n_idxShake = n_idxShake - 1;
  220.  
  221.             vec_pos    = VectorSet(RandBetween(-1, 1), RandBetween(-1, 1), RandBetween(-1, 1));
  222.             vec_dir    = VectorSet(RandBetween(-6, 6), RandBetween(-4, 4), RandBetween(-2, 2));
  223.             SetPOVShake( VectorScale(vec_pos, 0.0005 * n_idxShake), VectorScale(vec_dir, 0.05 * n_idxShake), 5, 45);
  224.  
  225.             if ( n_idxShake > 0 )
  226.             {
  227.                 SetTimerEx(0.1, TIMERID_SHAKE, n_idxShake, 0);
  228.             }
  229.         }
  230.     }
  231.     else if ( GetSenderID() == TIMERID_FACIAL )
  232.     {
  233.         t_lavaDude = GetParam(0);
  234.  
  235.         # Swap in the "real" head & store the value in the thing struct
  236.         SetThingMesh(t_lavaDude, 1, awakeHead, 0);
  237.  
  238.         # We're able to move now.
  239.         ClearActorFlags(t_lavaDude, 0x40000);
  240.     }
  241.  
  242.     return;
  243.  
  244.  
  245. # ...................................................................
  246. missed:
  247.  
  248.     t_lavaDude    = GetSenderRef();
  249.     n_damage    = GetParam(0);
  250.  
  251.     call BackfireAttack;
  252.  
  253.     return; 
  254.  
  255. # ...................................................................
  256. callback:
  257.  
  258.     t_lavaDude    = GetSenderRef();
  259.     n_param        = GetParam(1);
  260.  
  261.     if ( n_param == 21 )                                    # SITH_PUPPETCALLBACK_SENDMESSAGE1?
  262.     {
  263.         PlaySoundClass(t_lavaDude, 123);                    # Play SITHSOUNDCLASS_RESERVED1
  264.     }
  265.  
  266.     return;
  267.  
  268. # ===================================================================
  269. #    Subroutines
  270. # ===================================================================
  271.  
  272. # ...................................................................
  273. # t_lavaDude MUST be initialized before this call!
  274. # ...................................................................
  275. BackfireAttack:
  276.  
  277.     if ( GetThingUserData(t_lavaDude) == 1 )                    # Is "primary fire in progress?"
  278.     {
  279. #        DEBUGPRINT("Lava warrior damaging self");
  280.         SetThingUserData(t_lavaDude, 0);                        # Clear "primary fire in progress"
  281.         StopThing(t_lavaDude);                                    # Stop motion
  282.         SynchMode(t_lavaDude, 67, 75, 0, 0);                    # Synch FIRE3 to HIT
  283.  
  284.         DamageThing(t_lavaDude, n_damage, 0x80, t_lavaDude);    # Self-inflict SITH_DAMAGE_CRUSH
  285.         PlaySoundClass(t_lavaDude, 124);                        # Play RESERVED2
  286.     }
  287.  
  288.     return;
  289.  
  290. # ===================================================================
  291. end
  292.  
  293.